<Query Kind="Program">
  <Reference>&lt;ProgramFiles&gt;\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll</Reference>
  <Reference>&lt;RuntimeDirectory&gt;\System.XML.dll</Reference>
</Query>

//using System;
//using System.Threading;

public class Worker
{
	// This method will be called when the thread is started.
	public void DoWork()
	{
		while (!_shouldStop)
		{
			Console.WriteLine("worker thread: working...");
		}
		Console.WriteLine("worker thread: terminating gracefully.");
	}
	public void RequestStop()
	{
		_shouldStop = true;
	}
	// Volatile is used as hint to the compiler that this data
	// member will be accessed by multiple threads.
	private volatile bool _shouldStop;
//		private bool _shouldStop;
}

//public class WorkerThreadExample
//{
	static void Main()
	{
		// Create the thread object. This does not start the thread.
		Worker workerObject = new Worker();
		Thread workerThread = new Thread(workerObject.DoWork);

		// Start the worker thread.
		workerThread.Start();
		Console.WriteLine("main thread: Starting worker thread...");

		// Loop until worker thread activates.
		while (!workerThread.IsAlive);

		// Put the main thread to sleep for 1 millisecond to
		// allow the worker thread to do some work:
		Thread.Sleep(1);

		// Request that the worker thread stop itself:
		workerObject.RequestStop();

		// Use the Join method to block the current thread 
		// until the object's thread terminates.
		workerThread.Join();
		Console.WriteLine("main thread: Worker thread has terminated.");
	}
//}